{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np #导入NumPy数学工具箱\nimport pandas as pd #导入Pandas数据处理工具箱\ndf = pd.read_csv(\"../input/bank-customer/BankCustomer.csv\") # 读取文件\ndf.head() # 显示文件前5行","execution_count":7,"outputs":[{"output_type":"execute_result","execution_count":7,"data":{"text/plain":"              Name  Gender  Age     City  Tenure  ProductsNo  HasCard  \\\n0         Kan Jian    Male   37  Tianjin       3           2        1   \n1      Xue Baochai  Female   39  Beijing       9           1        1   \n2           Mao Xi  Female   32  Beijing       9           1        1   \n3  Zheng Nengliang  Female   37  Tianjin       0           2        1   \n4          Zhi Fen    Male   55  Tianjin       4           3        1   \n\n   ActiveMember  Credit  AccountBal  Salary  Exited  \n0             1     634    31937.37  137062       0  \n1             1     556    18144.95  110194       0  \n2             1     803    10378.09  236311       1  \n3             1     778    25564.01  129910       1  \n4             0     547     3235.61  136976       1  ","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Name</th>\n      <th>Gender</th>\n      <th>Age</th>\n      <th>City</th>\n      <th>Tenure</th>\n      <th>ProductsNo</th>\n      <th>HasCard</th>\n      <th>ActiveMember</th>\n      <th>Credit</th>\n      <th>AccountBal</th>\n      <th>Salary</th>\n      <th>Exited</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Kan Jian</td>\n      <td>Male</td>\n      <td>37</td>\n      <td>Tianjin</td>\n      <td>3</td>\n      <td>2</td>\n      <td>1</td>\n      <td>1</td>\n      <td>634</td>\n      <td>31937.37</td>\n      <td>137062</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Xue Baochai</td>\n      <td>Female</td>\n      <td>39</td>\n      <td>Beijing</td>\n      <td>9</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>556</td>\n      <td>18144.95</td>\n      <td>110194</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Mao Xi</td>\n      <td>Female</td>\n      <td>32</td>\n      <td>Beijing</td>\n      <td>9</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>803</td>\n      <td>10378.09</td>\n      <td>236311</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Zheng Nengliang</td>\n      <td>Female</td>\n      <td>37</td>\n      <td>Tianjin</td>\n      <td>0</td>\n      <td>2</td>\n      <td>1</td>\n      <td>1</td>\n      <td>778</td>\n      <td>25564.01</td>\n      <td>129910</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>Zhi Fen</td>\n      <td>Male</td>\n      <td>55</td>\n      <td>Tianjin</td>\n      <td>4</td>\n      <td>3</td>\n      <td>1</td>\n      <td>0</td>\n      <td>547</td>\n      <td>3235.61</td>\n      <td>136976</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.Exited.value_counts()","execution_count":8,"outputs":[{"output_type":"execute_result","execution_count":8,"data":{"text/plain":"0    7963\n1    2037\nName: Exited, dtype: int64"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns #导入seaborn画图工具箱\nsns.countplot(x=\"Exited\", data=df, palette=\"bwr\")\nplt.show()","execution_count":9,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 将某些特征转换为数值类型的哑变量\na = pd.get_dummies(df['ProductsNo'], prefix = \"PN\")\nb = pd.get_dummies(df['City'], prefix = \"City\")\nc = pd.get_dummies(df['Gender'], prefix = \"Gender\")\nframes = [df, a, b, c]\ndf = pd.concat(frames, axis = 1)\ndf.head()\ndf = df.drop(columns = ['ProductsNo', 'City',\"Gender\", \"Name\"])\ndf.head()","execution_count":10,"outputs":[{"output_type":"execute_result","execution_count":10,"data":{"text/plain":"   Age  Tenure  HasCard  ActiveMember  Credit  AccountBal  Salary  Exited  \\\n0   37       3        1             1     634    31937.37  137062       0   \n1   39       9        1             1     556    18144.95  110194       0   \n2   32       9        1             1     803    10378.09  236311       1   \n3   37       0        1             1     778    25564.01  129910       1   \n4   55       4        1             0     547     3235.61  136976       1   \n\n   PN_1  PN_2  PN_3  PN_4  City_Beijing  City_Shanghai  City_Tianjin  \\\n0     0     1     0     0             0              0             1   \n1     1     0     0     0             1              0             0   \n2     1     0     0     0             1              0             0   \n3     0     1     0     0             0              0             1   \n4     0     0     1     0             0              0             1   \n\n   Gender_Female  Gender_Male  \n0              0            1  \n1              1            0  \n2              1            0  \n3              1            0  \n4              0            1  ","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Age</th>\n      <th>Tenure</th>\n      <th>HasCard</th>\n      <th>ActiveMember</th>\n      <th>Credit</th>\n      <th>AccountBal</th>\n      <th>Salary</th>\n      <th>Exited</th>\n      <th>PN_1</th>\n      <th>PN_2</th>\n      <th>PN_3</th>\n      <th>PN_4</th>\n      <th>City_Beijing</th>\n      <th>City_Shanghai</th>\n      <th>City_Tianjin</th>\n      <th>Gender_Female</th>\n      <th>Gender_Male</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>37</td>\n      <td>3</td>\n      <td>1</td>\n      <td>1</td>\n      <td>634</td>\n      <td>31937.37</td>\n      <td>137062</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>39</td>\n      <td>9</td>\n      <td>1</td>\n      <td>1</td>\n      <td>556</td>\n      <td>18144.95</td>\n      <td>110194</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>32</td>\n      <td>9</td>\n      <td>1</td>\n      <td>1</td>\n      <td>803</td>\n      <td>10378.09</td>\n      <td>236311</td>\n      <td>1</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>37</td>\n      <td>0</td>\n      <td>1</td>\n      <td>1</td>\n      <td>778</td>\n      <td>25564.01</td>\n      <td>129910</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>1</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>55</td>\n      <td>4</td>\n      <td>1</td>\n      <td>0</td>\n      <td>547</td>\n      <td>3235.61</td>\n      <td>136976</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 构建特征和标签集\ny = df.Exited.values\nX = df.drop(['Exited'], axis = 1)","execution_count":11,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split  # 拆分训练集和测试集\nX_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2,random_state=0)","execution_count":12,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 进行特征缩放\nfrom sklearn import preprocessing\nscaler = preprocessing.MinMaxScaler()\nX_train = scaler.fit_transform(X_train)\nX_test = scaler.transform(X_test)","execution_count":13,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import (f1_score, confusion_matrix) # 导入评估指标","execution_count":14,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression # 导入逻辑回归模型\nfrom sklearn.metrics import f1_score, confusion_matrix # 导入评估标准\nlr = LogisticRegression() # 逻辑回归\nlr.fit(X_train,y_train) # 训练模型\ny_pred = lr.predict(X_test) # 预测结果\nlr_acc = lr.score(X_test,y_test)*100 # 准确率\nlr_f1 = f1_score(y_test, y_pred)*100 # F1分数\nprint(\"逻辑回归测试集准确率： {:.2f}%\".format(lr_acc))\nprint(\"逻辑回归测试集F1分数: {:.2f}%\".format(lr_f1))\nprint('逻辑回归测试集混淆矩阵:\\n', confusion_matrix(y_test,y_pred))","execution_count":15,"outputs":[{"output_type":"stream","text":"逻辑回归测试集准确率： 84.15%\n逻辑回归测试集F1分数: 49.60%\n逻辑回归测试集混淆矩阵:\n [[1527   56]\n [ 261  156]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.neighbors import KNeighborsClassifier # 导入KNN算法\nk = 5 # 设定初始K值为5\nknn = KNeighborsClassifier(n_neighbors = k)  # KNN模型\nknn.fit(X_train, y_train) # 拟合KNN模型\ny_pred = knn.predict(X_test) # 预测结果\nknn_acc = knn.score(X_test,y_test)*100 # 准确率\nknn_f1 = f1_score(y_test, y_pred)*100 # F1分数\nprint(\"{}NN 预测准确率: {:.2f}%\".format(k, knn_acc))\nprint(\"{}NN 预测F1分数: {:.2f}%\".format(k, knn_f1))\nprint('KNN 混淆矩阵:\\n', confusion_matrix(y_test,y_pred))","execution_count":16,"outputs":[{"output_type":"stream","text":"5NN 预测准确率: 81.65%\n5NN 预测F1分数: 43.80%\nKNN 混淆矩阵:\n [[1490   93]\n [ 274  143]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 寻找最佳K值\nf1_score_list = []\nacc_score_list = []\nfor i in range(1,15): # 从1到15，尝试每一个K值\n    kNN = KNeighborsClassifier(n_neighbors = i)  # n_neighbors means k\n    kNN.fit(X_train, y_train)\n    acc_score_list.append(kNN.score(X_test, y_test))\n    y_pred = kNN.predict(X_test) # 预测结果\n    f1_score_list.append(f1_score(y_test, y_pred))\nindex = np.arange(1,15,1)\n# 绘制不同K值时，kNN的准确率和F1分数\nplt.plot(index,acc_score_list,c='blue',linestyle='solid')\nplt.plot(index,f1_score_list,c='red',linestyle='dashed')\nplt.legend([\"Accuracy\", \"F1 Score\"])\nplt.xlabel(\"K value\")\nplt.ylabel(\"Score\")\nplt.grid('false')\nplt.show()\nkNN_acc = max(f1_score_list)*100\nprint(\"Maximum kNN Score is {:.2f}%\".format(kNN_acc))","execution_count":17,"outputs":[{"output_type":"stream","text":"/opt/conda/lib/python3.6/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \nPassing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n  warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n","name":"stderr"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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j3RrCiOAYcBaAHdfDLSPKygRkaQUFhby5ptv8sADD2yRFG6++Wb69OlDv379GDNmDADz5s3jmGOOoV+/fgwcOJAvv/yS1157jaFDh0bPO//88xk/fjwAPXr04Nprr+Wwww7jiSee4L777uPAAw+kX79+nHzyyaxbtw6ApUuXMmLECPr160e/fv146623uOqqqxg3bly03yuuuILbb7894+8/3dFHG93dzcwBzKxdxiMRESnnoovgww8zu8/+/eG226rfZvLkyRx33HHstddedOzYkffff5+lS5cyefJk3n33Xdq2bcvKlSsBOOussxgzZgwjRoxgw4YNlJaWsnDhwmr337p1a9544w0AVqxYwS9+8QsArrzySh544AEuuOACfvvb33LkkUfy1FNPUVJSQmFhIbvuuisnnXQSF154IaWlpUyaNIn33nuv/gelgnSTwuNmdg+wg5n9AjgXuC/j0YiIJGzixIlcdNFFAJx++ulMnDiR0tJSfv7zn9O2bVsAOnbsSEFBAYsWLWLEiBFAKOzTcdppp0W3Z82axZVXXsnq1aspLCzkxz/+MQCvvPIKjzzyCAA5OTl06NCBDh060KlTJz744AOWLl3KgAED6NSpU8bed5m0koK7jzWzIcAaYG/gand/MePRiIik1HRGH4cVK1bwyiuvMGvWLMyMkpISzIyTTz55q1E97l7pPpo3b05paWl0v+Lw0HbtNje0jBw5ksmTJ9OvXz/Gjx/Pa6+9Vm18o0aNYvz48Xz77bece+65tXx36amxT8HMcszsJXd/0d0vc/dLlRBEZFv05JNP8rOf/Yyvv/6aBQsWsHDhQnr27EnHjh158MEHozb/lStXsv3225Obm8vkyZMBKCoqYt26dXTv3p05c+ZQVFTE999/z8svv1zl6xUUFLDLLruwadMmHnvssWj94MGDufvuu4HQIb1mzRoARowYwdSpU5k+fXpUq8i0GpOCu5cA68ysQ213bmbHmdlcM5tnZmOq2OZUM5tjZrPNbEJtX0NEJFMmTpwYNQeVOfnkk1m8eDHDhg0jLy+P/v37M3bsWAAeffRRbr/9dvr27csPf/hDvv32W3bbbTdOPfVU+vbty1lnncWAAQOqfL3rrruOgw8+mCFDhrDPPvtE68eNG8err75Knz59OOCAA5g9ezYALVu25Oijj+bUU08lJycnhiMAVlUVaIuNzB4HBgEvkhqBBODuv63mOTnA58AQIB+YDpzh7nPKbdMLeBz4kbuvMrOu7v5ddbHk5eX5jBkzaoxZRBqfTz/9lN69eycdRtYqLS1l4MCBPPHEE/Tq1avK7So7jmY2093zanqNdDuan0sttXEQMM/dv0oFNAkYDswpt80vgDvdfRVATQlBRKSpmjNnDkOHDmXEiBHVJoT6Srej+WEzawnslVo119031fC0bkD5sVn5wMEVttkLwMzeBHKAa9x9ajoxiYg0Jfvuuy9fffVV7K+TVlIws6OAh4EFgAG7mdk57v56dU+rZF3FtqrmQC/gKCAXmGZm+7v76gqvPxoYDbD77runE7KIiNRBulc0/w041t2PdPcjgB8Df6/hOfnAbuXu5wKLK9nmaXff5O7zgbmEJLEFd7/X3fPcPa9Lly5phiwiIrWVblJo4e5zy+64++eE+Y+qMx3oZWY9U01PpwNTKmwzGTgawMw6E5qT4q8fiYhIpdLtaJ5hZg8Aj6bunwXMrO4J7l5sZucDzxP6Cx5099lmdi0ww92npB471szmACXAZe6+oi5vRERE6i/dmsKvgdnAb4ELCSOIflXTk9z93+6+l7v/wN2vT627OpUQ8OB37r6vu/dx9/imJBQRSUNOTg79+/ePlgULFrBixQqOPvpotttuO84///wqn/vss88yYMAA+vXrx7777ss999zTgJFnRro1hebAOHe/FaJrEFrFFpWISELatGnDhxVm4lu7di3XXXcds2bNYtasWZU+b9OmTYwePZr33nuP3NxcioqKWLBgQb1icXfcnWbNGu730NJ9pZeBNuXutwFeynw4IiLZp127dhx22GHVTnpXUFBAcXFxNEldq1at2HvvvYHKp8IGuPXWW9l///3Zf//9uS012dOCBQvo3bs35513HgMHDmThwoW88MILHHLIIQwcOJCf/OQnFBYWxvZe060ptHb3KAp3LzSztjHFJCISHHXU1utOPRXOOw/WrYPjj9/68ZEjw7J8OZxyypaP1TDhHMD69evp378/AD179uSpp55KK9SOHTsybNgwunfvzuDBgxk6dChnnHEGzZo1q3Qq7JkzZ/LQQw/x7rvv4u4cfPDBHHnkkey4447MnTuXhx56iLvuuovly5fzl7/8hZdeeol27dpx0003ceutt3L11VenFVdtpZsU1prZQHd/H8DM8oD1sUQkIpKgypqP0nX//ffzySef8NJLLzF27FhefPFFxo8fX+lU2G+88QYjRoyIZk096aSTmDZtWpRYBg0aBMA777zDnDlzOPTQQwHYuHEjhxxySAbeaeXSTQoXAU+Y2WLCBWi7AqdV/xQRkXqq7sy+bdvqH+/cOa2aQab16dOHPn36cPbZZ9OzZ8/oV9cqqm7eufLTa7s7Q4YMYeLEiZkOtVLV9imY2YFmtrO7Twf2Af4JFANTgfkNEJ+ISKNQWFi4xe8hfPjhh3Tv3h2ofCrsI444gsmTJ7Nu3TrWrl3LU089xeGHH77VfgcNGsSbb77JvHnzAFi3bh2ff/55bO+jpo7me4CNqduHAH8E7gRWAffGFpWISJbp0aMHv/vd7xg/fjy5ubnMmTNni8fdnZtvvpm9996b/v3786c//SmqJVQ2FfbAgQMZOXIkBx10EAcffDCjRo2qdJrtLl26MH78eM444wz69u3LoEGD+Oyzz2J7n9VOnW1mH7l7v9TtO4Fl7n5N6v6H7t4/tsiqoKmzRbZdmjo7M+ozdXZNNYUcMyvrdxgMvFLusXT7I0REpJGoqWCfCPzHzJYTRhtNAzCzPYHvY45NREQaWLVJwd2vN7OXgV2AF3xzW1Mz4IK4gxMRkYZVYxOQu79Tybr4ur5FpElzd8wq+zkWSUc6P7FcnYabUENEpAatW7dmxYoV9S7Ymip3Z8WKFdVOx1ETdRaLSNbIzc0lPz+fZcuWJR1Ko9W6dWtyc3Pr/HwlBRHJGi1atKBnz55Jh9GkqflIREQiSgoiIhJRUhARkYiSgoiIRJQUREQkoqQgIiIRJQUREYkoKYiISERJQUREIkoKIiISUVIQEZGIkoKIiESUFEREJKKkICIiESUFERGJKCmIiEhESUFERCKxJgUzO87M5prZPDMbU8njI81smZl9mFpGxRmPiIhUL7af4zSzHOBOYAiQD0w3synuPqfCpv909/PjikNERNIXZ03hIGCeu3/l7huBScDwGF9PRETqKc6k0A1YWO5+fmpdRSeb2cdm9qSZ7RZjPCIiUoM4k4JVss4r3H8G6OHufYGXgIcr3ZHZaDObYWYzli1bluEwRUSkTJxJIR8of+afCywuv4G7r3D3otTd+4ADKtuRu9/r7nnuntelS5dYghURkXiTwnSgl5n1NLOWwOnAlPIbmNku5e4OAz6NMR4REalBbKOP3L3YzM4HngdygAfdfbaZXQvMcPcpwG/NbBhQDKwERsYVj4iI1MzcKzbzZ7e8vDyfMWNG0mGIiDQqZjbT3fNq2k5XNIuISERJQUREIkoKIiISUVIQEZGIkoKIiESUFEREJNJ0kkJREfz1r/D110lHIiKStZpOUli6FK67Di65JOlIRESyVtNJCrvvDldcAf/6F7z4YtLRiIhkpaaTFAAuvRT23BMuuAA2bkw6GhGRrNO0kkKrVjBuHMydC3//e9LRiIhknaaVFACOPx4uvxx+9KOkIxGJx5o1cPXVkJ+fdCTSCDW9pABwww1w4IFJRyGSecXFcNppYVDFOedAI5vwslG7807o0QMmTGjUx71pJgWA77+HX/wCXnkl6Uiq95//wLvvwrp18MknSUcj2e6SS2DqVDjxxPDZHj8+6YiajtNOg4ICOOssGDwYPm2cPw/TdJNCy5bw8suh03nTpqSjqdzy5XD66TB6dPh7/PEhOYhUZdgwuOYaePppGDsWTjop6Yi2bWvXhqa6oiLo3Bm++w7uvhs++AD69YNbbkk6wlprukmhTZvQ6TxnDtxxR9LRbM091GRWrICHH4bLLgttxGPHJh1Z01BQEM72Xn016UjS89134e/gwfCnP4FZqDV06BBOehpxc0bWWrkShgyB66+HadPCupwc+NWvwmCWM8+EnXcO6xvT8Xf3RrUccMABnlEnnODevr374sWZ3W993XefO7iPHbt53U9+4t62rfvChcnF1VT893+H479oUdKR1Oz998Nn+JFHtn5syRL3Pn3cH3qowcPapuXnu++3n3vLlu7/+781b3/bbe7DhrnPnx97aFUh/OJljWVs060plLnttlD1u+KKpCPZbP58uPDCcNZ38cWb1990E5SUwB//mFxsTcHkyfDAAzBmDOy6K3zxRehEzEaLFsHQobDDDnDMMVs/3rVreOzii2Hx4oaPr7Y++wxGjgw1+Gz1xRdw2GHwzTeh/2bEiJqf07x5aK7ed98w3U42XyeVTubIpiXjNQV398cfd//mm8zvt66Ki91vuimcjVR0+eXuRxzhvmFDw8fVFCxZ4t65s/uAAe5FRWHdhReGWsMttyQbW0UFBSHO9u3dP/646u0+/9y9detwplpa2nDx1dbq1e69eoVj3aGD+/ffJx1R5T75xH2vvdxnzKjd8775xv2k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\n"},"metadata":{"needs_background":"light"}},{"output_type":"stream","text":"Maximum kNN Score is 47.23%\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.svm import SVC # 导入SVM分类器\nsvm = SVC(random_state = 1) # SVM模型\nsvm.fit(X_train, y_train) #拟合SVM模型\ny_pred = svm.predict(X_test) # 预测心脏病结果\nsvm_acc = svm.score(X_test,y_test)*100 # 准确率\nsvm_f1 = f1_score(y_test, y_pred)*100 # F1分数\nprint(\"SVM 预测准确率:: {:.2f}%\".format(svm_acc))\nprint(\"SVM 预测F1分数: {:.2f}%\".format(svm_f1))\nprint('SVM 混淆矩阵:\\n', confusion_matrix(y_test,y_pred))","execution_count":18,"outputs":[{"output_type":"stream","text":"SVM 预测准确率:: 84.45%\nSVM 预测F1分数: 46.66%\nSVM 混淆矩阵:\n [[1553   30]\n [ 281  136]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.naive_bayes import GaussianNB # 导入模型\nnb = GaussianNB() # 朴素贝叶斯模型\nnb.fit(X_train, y_train) # 拟合模型\ny_pred = nb.predict(X_test) # 预测心脏病结果\nnb_acc = nb.score(X_test,y_test)*100 # 准确率\nnb_f1 = f1_score(y_test, y_pred)*100 # F1分数\nprint(\"朴素贝叶斯测试集准确率:: {:.2f}%\".format(nb_acc))\nprint(\"朴素贝叶斯测试集F1分数: {:.2f}%\".format(nb_f1))\nprint('朴素贝叶斯混淆矩阵:\\n', confusion_matrix(y_test,y_pred))","execution_count":19,"outputs":[{"output_type":"stream","text":"朴素贝叶斯测试集准确率:: 81.35%\n朴素贝叶斯测试集F1分数: 22.13%\n朴素贝叶斯混淆矩阵:\n [[1574    9]\n [ 364   53]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier # 导入模型\ndt = DecisionTreeClassifier() # 分类决策树\ndt.fit(X_train, y_train) # 拟合模型\ny_pred = dt.predict(X_test) # 预测心脏病结果\ndt_acc = dt.score(X_test,y_test)*100 # 准确率\ndt_f1 = f1_score(y_test, y_pred)*100 # F1分数\nprint(\"决策树测试集准确率:: {:.2f}%\".format(dt_acc))\nprint(\"决策树测试集F1分数: {:.2f}%\".format(dt_f1))\nprint('决策树混淆矩阵:\\n', confusion_matrix(y_test,y_pred))","execution_count":20,"outputs":[{"output_type":"stream","text":"决策树测试集准确率:: 79.95%\n决策树测试集F1分数: 52.09%\n决策树混淆矩阵:\n [[1381  202]\n [ 199  218]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier # 导入模型\nrf = RandomForestClassifier(n_estimators = 1000, random_state = 1) # 随机森林\nrf.fit(X_train, y_train) # 拟合模型\ny_pred = rf.predict(X_test) # 预测心脏病结果\nrf_acc = rf.score(X_test,y_test)*100 # 准确率\nrf_f1 = f1_score(y_test, y_pred)*100 # F1分数\nprint(\"随机森林 预测准确率:: {:.2f}%\".format(rf_acc))\nprint(\"随机森林 预测F1分数: {:.2f}%\".format(rf_f1))\nprint('随机森林 混淆矩阵:\\n', confusion_matrix( y_test,y_pred))","execution_count":21,"outputs":[{"output_type":"stream","text":"随机森林 预测准确率:: 86.50%\n随机森林 预测F1分数: 59.58%\n随机森林 混淆矩阵:\n [[1531   52]\n [ 218  199]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 用直方图显示出各个算法的F1分数\nimport seaborn as sns\nmethods = [\"Logistic Regression\", \"KNN\", \"SVM\", \n           \"Naive Bayes\", \"Decision Tree\", \"Random Forest\"]\nf1 = [lr_f1, knn_f1, svm_f1, nb_f1, dt_f1, rf_f1]\ncolors = [\"orange\",\"red\",\"purple\", \"magenta\", \"green\",\"blue\"]\nsns.set_style(\"whitegrid\")\nplt.figure(figsize=(16,5))\nplt.yticks(np.arange(0,100,10))\nplt.ylim((0,80))\nplt.ylabel(\"F1 Score\")\nplt.xlabel(\"Algorithms\")\nsns.barplot(x=methods, y=f1, palette=colors)\n# plt.grid(b=None)\nplt.show()","execution_count":25,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1152x360 with 1 Axes>","image/png":"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12azKSQkpNhPt7Rr104LFixQv379tG/fPg0ePFgHDx7U3LlzlZOTo7CwMD377LOSigLu5MmTFRwcrMcee0w5OTmSpMGDB+ull17SoEGD1Lt3b3311VcaMWKEgoKC9Oqrr0qSLly4oJiYGIWGhiokJMQhARwAAEcjwAIAUE4bN25U165d1aRJE9144436+uuvi21/7733VK9ePa1evVrDhg2zb09NTdXcuXO1dOlSxcfH6+DBg9q4caOkomDZvHlzffzxx+rQoYO9reeee041a9ZUQkKC5s2bJ0n68ccfNWjQICUmJqpu3bpav369ff8aNWpo+fLleuihhzRs2DD97W9/05o1a7Rq1SqdPn1a27dvl4+Pjz755BOtWbNGXbt2dfSfCwCASkeABQCgnBITExUcHCxJ6tOnj9asWVNs+969e9WnTx9JUosWLdSyZUtJ0sGDB9WxY0d5e3vL3d1dNptNe/bskSS5ubmpV69e5eq/cePG8vf3lyS1bt1aJ0+etG8LDAy099u8eXP5+PjIw8NDfn5+OnXqlFq0aKGdO3dqzpw5+uKLL1S3bt1r+EsAAFA13Ku6AAAArOD06dPatWuXvv/+e7m4uKigoEAuLi4aOHCgfR9jzO9u19PTU25ubuXa18PDw/5vNzc35ebmXrHN1dW12H6urq7Kz89XkyZNFBcXp61bt2revHnq0qWLRowY8bvrBQCgKjEDCwBAOaxfv17h4eHavHmzNm3apK1bt6px48ZKTU2173PnnXdq3bp1kqTDhw/ru+++kyT95S9/0Z49e5SRkaGCggIlJibqrrvuKrNPd3d35eXlVUr9qampqlWrlsLCwjR06FB98803ldIuAADOxAwsAADlkJiYqCeeeKLYc0FBQcV+6mbgwIEaP368bDabWrVqpZYtW6pu3bry8fHR2LFjNWTIEBljdO+99+r+++8vs8/+/fsrNDRUrVq10pgxY66p/u+++06zZ8+Wq6ur3N3dNXXq1GtqDwCAquBiKrLeCQAAXKGgoED5+fny9PTU8ePHFRUVpU8//bTYkl4AAFBxzMACAFBJsrOz9eijjyo/P1/GGE2ZMoXwCgBAJWIGFgAAAABgCXyJEwAAAADAEgiwAAAAAABLIMACAAAAACyBAAsAAAAAsAQCLAAAAADAEgiwAAAAAABL+H8d0RQbnHMajAAAAABJRU5ErkJggg==\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 用直方图显示出各个算法的预测准确率\nimport seaborn as sns\nmethods = [\"Logistic Regression\", \"KNN\", \"SVM\", \n           \"Naive Bayes\", \"Decision Tree\", \"Random Forest\"]\nf1 = [lr_acc, knn_acc, svm_acc, nb_acc, dt_acc, rf_acc]\ncolors = [\"orange\",\"red\",\"purple\", \"magenta\", \"green\",\"blue\"]\nsns.set_style(\"whitegrid\")\nplt.figure(figsize=(16,5))\nplt.yticks(np.arange(0,100,10))\nplt.ylim((60,100))\nplt.ylabel(\"Accurancy %\")\nplt.xlabel(\"Algorithms\")\nsns.barplot(x=methods, y=f1, palette=colors)\n# plt.grid(b=None)\nplt.show()","execution_count":23,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1152x360 with 1 Axes>","image/png":"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Lj8//zfthwD7O3P06FFFRkbK4XAoMjJSP/30kyTp8OHD6tOnj3r16qU5c+ZYM1UXfkrz3Xff6ZFHHpHT6ZTD4dDBgwc1a9YsHT58WE6nU9OnTy+yfn5+vqZPny6HwyGHw6H33nvvsrW1bt1ax48ftx7/7//+rx577DFFRERo6NChOnHihCTpP//5jxwOh/r27avp06db+1u2bJlGjRqlYcOGaciQIZKkBQsWqFevXnI4HFawPnv2rKKiohQWFqbQ0FBrYDBz5kz16NFDDodD06dPl1T4adLChQslFf5n6dOnjxwOh55++mmdPn1akvT4448rNjZWjzzyiB566CFt3779al4iXIHt27crJiZGb775pm655Rbr+V69emn16tU6derUJdt4e3urb9++euedd8qzVNjAL7/8ojp16qhq1aqSpLp16+q+++6Tn5+fvv76a2u91atXKyQkxHrcvXt363iycuXKIstgL5c7Pnz22Wfq3bu3wsPDNWjQIP33v/+VVPgeNHnyZGVkZCgoKMiabcvKylKnTp2Um5urw4cPa+jQoYqIiFD//v1dftCRl5ens2fPqlatWiXuu6CgQMHBwVbYLigoULdu3ZSWlqa0tDQ988wz6tWrl3r16qUdO3ZIkr788ktrliQ8PFxnzpwps78dLlWvXj299NJLWrx4sYwx1vjo/Pjko48+stb9xz/+IYfDobCwMGsGa/z48VqzZo2kihmrbN26VYMGDdKYMWPUs2dPSdLHH39sjQlfeOEFq78nJSWpb9++6tmzp0aPHq2zZ89e5V8PktSqVStrjJyZmanIyEj17NlTDodD69evl1Q4Zu/evbtiYmIUEhKiIUOGKDs7W1LhmDosLEx9+/YtEoRzcnL0/PPPy+FwKDw8XJ9//rmkwuPZiBEjNGzYMAUFBen999/XokWLFB4erj59+hQ7ripJcnKywsPD5XA49Pzzz+vcuXOSCs9cev311/Xoo49qzZo1JR4fV69erdDQUIWFhWnAgAE6d+6c5s6dq1WrVsnpdNr/Az6DIlq1anXJc0899ZRZtmyZMcaYJUuWmOHDhxtjjImKijIrVqwwxhjzwQcfWNseOXLEhISEGGOMmTx5sklISDDGGJOTk2OysrKKLL94/cWLF5uRI0ea3NxcY4wxJ0+evKSe//f//p9ZvXq1McaYTz/91IwdO9YYY8y5c+dM3759TWpqqjHGmMTERDN+/HhjjDEhISFmx44dxhhjYmNjrf3Fx8ebwMBAaz+bN282MTExpqCgwOTn55uoqCjz5ZdfmjVr1piJEydaNaSnp5uTJ0+a4OBgU1BQYIwx5vTp08YYY+bOnWsWLFhgjDEmNDTUfPHFF8YYY2bPnm2mTJlijDHmscceM9OmTTPGGLNx40YTGRlZ/AsCt2jevLlp27atSUlJKfL8+ddu3rx5Zs6cOcaYov8nWrVqZTIyMkyXLl1Menq6WbBggZk7d2651o5r05kzZ0xYWJgJDg42kyZNsv7f/+Mf/zBTp041xhizc+dOExERYW3TpUsX88MPP5i+ffsaY4xxOp3mu+++K3J8hH1c7vhw6tQp673iX//6l3X8j4+PNy+++KIxxphhw4aZ5ORkY0zh+9eECROMMcYMHDjQHDhwwBhjzK5du8zjjz9+yb7j4+PN/fffb8LCwky7du3Mo48+avLy8i6773nz5plFixYZYwrf+0aOHGmMMWbs2LFm27Ztxhhjjh49ah5++GFjTOFYYPv27caYwv5+/n0aZae4MVibNm3ML7/8Yj766CPzt7/9zRhTOJ7q2bOnOXz4sNm4caPp27evOXv2rDHm13HT+bFSeY1VLhybGWPMli1bTKtWrczRo0eNMcbs3bvXDB8+3Oo3MTEx5pNPPjH//e9/zYABA6z6//73v5s33njjt/7p8H/O96G8vDzzzDPPmKSkJGOMMbm5uSYjI8MYY0xqaqrp2rWrKSgoMEeOHDEBAQHm22+/NcYYM2rUKLN8+XJjTNF+8corr1jvTQsXLrTG1/v37zedOnUy2dnZJj4+3nTt2tVkZGSY1NRUc88995gPPvjAGGPM1KlTrePNhebOnWs6dOhgwsLCTFhYmNm0aZPJzs42HTt2ND/88IMxxpjnnnvO2rZLly4mLi7O2r6k42NoaKg5duyYMebXPn/h8dbuvCs6QNvBzp07ret4nE6nYmNjJUm7du3S3/72N0mSw+HQjBkzLtm2VatWmj9/vo4dO6bg4GDddtttl91XcnKy+vXrJ2/vwpemdu3axa43Y8YMxcbGKi0tTf/85z8lSQcOHNC+ffs0ePBgSYWfKN9www1KT09XZmam7rnnHklSaGioNm7caLXVvn17az9btmzRli1brNNqzp49q4MHD6pNmzaaPn26YmNj1aVLF7Vp00Z5eXny8fHRxIkT1blzZ3Xu3LlIjRkZGcrIyNB9990nSerZs6eio6Ot5d26dZMktWjRQkePHr3s3wVly9vbW61bt9bSpUsVExNzyfKBAwcqPDzcmpW/UI0aNeR0OvXuu++qWrVq5VEubKB69epatmyZtm/fri+++EJjxozRs88+q5CQEPXr10/jx4+/5PRhSapVq5b8/PyUmJioJk2a0KdsrqTjw7FjxzRmzBj98ssvOnfunBo2bHjJtj169NCqVav0wAMPKDExUf3791dmZqZ27txZ5L3j/ExEcdv/9a9/lTFGL774ohYie1DGAAAM4UlEQVQuXKioqKgS992rVy+NGDFCgwYNUnx8vCIiIiQVzpzt37/favfMmTM6c+aM7rnnHr3yyityOBwKDg5W9erVy+RvhsszxkgqHJ/s3btXa9eulVQ4xjh06JCSk5MVEREhX19fSZeOm2rUqFFhY5VWrVpZl+ds3bpVu3fvVq9evSRJ2dnZql+/vnx9fbV//37169dPkpSbm6t77733N+0Hv8rOzpbT6dTRo0fVokULtW/fXlJhP3r11Ve1bds2eXp66vjx49aZIA0bNlRAQICkX1/ni/uF0+nU5s2bJUk7duzQY489Jklq0qSJbr75Zh04cECSdP/996tGjRqSpJo1ayooKEiS1LRpU+3du7fYmgcNGqShQ4daj/fs2aOGDRuqcePGkgr75OLFi61rq3v06CFJlz0+tm7dWuPHj1f37t2tPlyZEGCvgIeHR6nXdTgcatmypTZu3KihQ4dqypQpatSoUYnrG2NK1f6f//xnBQcH691339X48eO1bNkyGWN05513WoH2vPOnwpTk/EH//P6joqKsA+mFli1bpqSkJM2aNUvt27fXyJEjtXTpUiUnJysxMVHvv/++3n33XZe1n3f+VENPT8/ffB4/ro6np6dmz56twYMHa/78+Ro2bFiR5X5+fgoNDdUHH3xQ7PaRkZGKiIiwBnyAJHl5een+++/X/fffr6ZNm2r58uWKiIhQgwYN9OWXX2rdunWXHJ+kwjfjyZMna9q0aRVQNcpacceHKVOmaNCgQXrwwQf1xRdfFHtdY1BQkF599VWdOnVK33zzjR544AFlZWXJz89PCQkJpd6/h4eHunTpovfff19RUVEl7vumm25SvXr1lJycrK+//to69bSgoED/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\n"},"metadata":{}}]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}